package com.zeng.ssm.service.support.trans.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 客户端Handler
 *
 * @author zengwanlin
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ClientHandler {

    /**
     * 系统编码
     *
     * @return
     */
    String sysCode();

    /**
     * 消息编码
     *
     * @return
     */
    String msgCode();

    /**
     * 消息名称
     *
     * @return
     */
    String msgName();

    /**
     * 报文记录方式
     *
     * @return
     */
    LoggingType loggingType() default LoggingType.FILE;

    /**
     * 是否不可重复
     * <p>
     * 查询类接口为false
     *
     * @return
     */
    boolean unRepeatable() default true;

    /**
     * 如果已成功，是否需要再次解析响应报文
     *
     * @return
     */
    boolean reParse() default false;

    /**
     * 报文记录方式
     */
    enum LoggingType {

        /**
         * 记录到表
         */
        TABLE("table"),

        /**
         * 记录到文件
         */
        FILE("file"),

        /**
         * 不记录
         */
        NONE("none");

        private String value;

        LoggingType(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

}
